//package com.bupt.cad.utils;
//
//
//import java.sql.Array;
//import java.sql.CallableStatement;
//import java.sql.Connection;
//import java.sql.PreparedStatement;
//import java.sql.ResultSet;
//import java.sql.SQLException;
//import java.util.List;
//
//import com.alibaba.fastjson.JSON;
//import org.apache.ibatis.type.BaseTypeHandler;
//import org.apache.ibatis.type.JdbcType;
//import org.apache.ibatis.type.TypeException;
//
//// 继承自BaseTypeHandler<Object[]> 使用时传入的参数一定要是Object[]，例如 int[]是 Object, 不是Object[]，所以传入int[] 会报错的
//public class ArrayTypeHandler<T> extends BaseTypeHandler<T> {
//    private Class<T> type;
//    public ArrayTypeHandler(Class<T> type) {
//        if (type == null) {
//            throw new IllegalArgumentException("Type argument cannot be null");
//        }
//        this.type = type;
//    }
//
//    private static final String TYPE_NAME_VARCHAR = "varchar";
//    private static final String TYPE_NAME_INTEGER = "integer";
//    private static final String TYPE_NAME_BOOLEAN = "boolean";
//    private static final String TYPE_NAME_NUMERIC = "numeric";
//
//    @Override
//    public void setNonNullParameter(PreparedStatement ps, int i, T parameter,
//                                    JdbcType jdbcType) throws SQLException {
//
//        String typeName = TYPE_NAME_VARCHAR;
//        if(parameter instanceof List){
//            Object[] stringParameter = new String[((List) parameter).size()];
//            for(int j=0;j<((List) parameter).size();j++){
//                stringParameter[j]=JSON.toJSONString(((List) parameter).get(j));
//            }
//            // 这3行是关键的代码，创建Array，然后ps.setArray(i, array)就可以了
//            Connection conn = ps.getConnection();
//            Array array = conn.createArrayOf(typeName, stringParameter);
//            ps.setArray(i, array);
//        }
//
//
//
//
//    }
//
//    @Override
//    public T getNullableResult(ResultSet rs, String columnName)
//            throws SQLException {
//        Array array = rs.getArray(columnName);
//        List object = (List) array.getArray();
//
//        Object[] objects = getArray(rs.getArray(columnName));
//        return
//    }
//
//    @Override
//    public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
//
//        return getArray(rs.getArray(columnIndex));
//    }
//
//    @Override
//    public T getNullableResult(CallableStatement cs, int columnIndex)
//            throws SQLException {
//
//        return getArray(cs.getArray(columnIndex));
//    }
//
//    private Object[] getArray(Array array) {
//
//        if (array == null) {
//            return null;
//        }
//
//        try {
//            return (Object[]) array.getArray();
//        } catch (Exception e) {
//        }
//
//        return null;
//    }
//}